package Sort.BubbleSort;

public class Bubble3 {
    /*
    一种更加高效的冒泡排序算法，当后方已完成排序，则只在其前方进行排序
    且包含有Bubble2的优良基因


    对数组a中元素进行交换
     */
    public static void sort(Comparable[] a){
        int n=a.length-1;
        while (n>0){
            int last=0;//表示最后一次交换索引的位置
            int flag=0;
            for(int j=0;j<n;j++){
                if(greater(a[j],a[j+1])){
                    exch(a,j,j+1);
                    last=j;
                    flag=1;
                }
                System.out.println("第"+j+"轮交换");
            }
            n=last;//   ?????这里为啥不是n-1？？？？？？
            if(n==0 || flag==0){
                break;
            }
            System.out.println("第"+"轮遍历");
            System.out.println("----------------");
        }


    }
    private static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w)>0;

    }
    /*
    数组元素i和j交换位置
     */
    private static void exch(Comparable[] a,int i,int j){
        Comparable temp;
        temp=a[i];
        a[i]=a[j];
        a[j]=temp;
    }




}
